#!/usr/bin/env python3
"""
现代化GUI框架演示

展示基于 CustomTkinter 的现代化桌面应用框架
"""

import sys
import subprocess
import time
from pathlib import Path

def check_dependencies():
    """检查依赖项"""
    print("🔍 检查现代化GUI框架依赖...")
    
    required_packages = {
        'customtkinter': 'CustomTkinter 现代化GUI框架',
        'darkdetect': '系统主题检测',
        'PIL': 'Pillow 图像处理库',
    }
    
    missing_packages = []
    
    for package, description in required_packages.items():
        try:
            if package == 'PIL':
                import PIL
            else:
                __import__(package)
            print(f"   ✅ {package} - {description}")
        except ImportError:
            print(f"   ❌ {package} - {description} (未安装)")
            if package == 'PIL':
                missing_packages.append('Pillow')
            else:
                missing_packages.append(package)
    
    return missing_packages

def install_missing_packages(packages):
    """安装缺失的包"""
    if not packages:
        return True
    
    print(f"\n📦 需要安装以下包: {', '.join(packages)}")
    
    try:
        for package in packages:
            print(f"   正在安装 {package}...")
            subprocess.check_call([
                sys.executable, "-m", "pip", "install", package
            ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
            print(f"   ✅ {package} 安装成功")
        
        print("✅ 所有依赖安装完成")
        return True
        
    except subprocess.CalledProcessError as e:
        print(f"❌ 安装失败: {e}")
        return False

def show_framework_preview():
    """显示框架预览"""
    print("\n🎨 现代化GUI框架特性预览")
    print("=" * 60)
    
    preview_text = """
🎯 框架特性:
┌─────────────────────────────────────────────────────────┐
│  🎨 现代化设计系统                                        │
│  📱 响应式布局管理                                        │
│  🌓 深色/浅色主题支持                                     │
│  🧩 可复用组件库                                          │
│  📐 灵活的布局系统                                        │
│  ⚡ 高性能渲染                                            │
│  🔧 易于扩展和定制                                        │
└─────────────────────────────────────────────────────────┘

🧩 核心组件:
• ModernButton - 现代化按钮 (多种样式变体)
• ModernCard - 卡片容器 (圆角、阴影效果)
• ModernEntry - 输入框 (验证、占位符)
• ModernProgressBar - 进度条 (百分比显示)
• StatusBadge - 状态徽章 (成功、警告、错误)
• ModernTabView - 标签页 (现代化样式)
• ModernSwitch - 开关控件 (iOS风格)

📐 布局系统:
• SidebarLayout - 侧边栏布局
• GridLayout - 网格布局
• FlexLayout - 弹性布局
• CardGrid - 卡片网格
• ResponsiveLayout - 响应式布局
• DashboardLayout - 仪表板布局

🎨 设计特点:
• 主题色: #007AFF (iOS蓝)
• 字体: SF Pro Display/Text
• 圆角: 6px - 20px
• 间距: 4px - 32px 网格系统
• 动画: 150ms - 400ms 缓动
    """
    
    print(preview_text)

def run_demo_app():
    """运行演示应用"""
    print("\n🚀 启动现代化GUI演示应用...")
    
    try:
        # 添加项目路径
        project_root = Path(__file__).parent
        sys.path.insert(0, str(project_root))
        
        # 导入并运行主窗口
        from src.gui.modern_gui.main_window import ModernMainWindow
        
        print("🎨 创建现代化主窗口...")
        app = ModernMainWindow()
        
        print("✅ 应用启动成功！")
        print("💡 使用说明:")
        print("   • 左侧侧边栏: 导航菜单和快速操作")
        print("   • 主内容区: 各功能页面")
        print("   • 头部区域: 应用标题和系统状态")
        print("   • 快捷键: Ctrl+Q 退出, F11 全屏")
        print("   • 主题: 自动检测系统深色/浅色模式")
        print("\n🎯 开始体验现代化GUI框架...")
        
        # 启动应用主循环
        app.mainloop()
        
        return True
        
    except ImportError as e:
        print(f"❌ 导入失败: {e}")
        print("请确保所有依赖已正确安装")
        return False
    except Exception as e:
        print(f"❌ 启动失败: {e}")
        return False

def create_simple_demo():
    """创建简单演示"""
    print("\n🎨 创建简单组件演示...")
    
    try:
        import customtkinter as ctk
        from src.gui.modern_gui import ModernTheme, ModernButton, ModernCard
        
        # 设置主题
        ModernTheme.setup_theme()
        
        # 创建简单窗口
        root = ctk.CTk()
        root.title("🎨 现代化组件演示")
        root.geometry("600x400")
        
        # 主容器
        main_frame = ctk.CTkFrame(root, fg_color="transparent")
        main_frame.pack(fill="both", expand=True, padx=20, pady=20)
        
        # 标题
        title = ctk.CTkLabel(
            main_frame,
            text="🎨 现代化GUI组件演示",
            font=ModernTheme.get_font('title'),
            text_color=ModernTheme.COLORS['primary']
        )
        title.pack(pady=(0, 20))
        
        # 按钮演示
        button_frame = ctk.CTkFrame(main_frame, fg_color="transparent")
        button_frame.pack(fill="x", pady=(0, 20))
        
        ModernButton(button_frame, text="主要按钮", variant="primary").pack(side="left", padx=(0, 10))
        ModernButton(button_frame, text="次要按钮", variant="secondary").pack(side="left", padx=(0, 10))
        ModernButton(button_frame, text="成功按钮", variant="success").pack(side="left", padx=(0, 10))
        ModernButton(button_frame, text="警告按钮", variant="warning").pack(side="left")
        
        # 卡片演示
        card = ModernCard(main_frame, title="📋 示例卡片")
        card.pack(fill="x", pady=(0, 20))
        
        card_content = ctk.CTkLabel(
            card.content_frame,
            text="这是一个现代化的卡片组件，具有圆角边框和优雅的阴影效果。",
            font=ModernTheme.get_font('body'),
            wraplength=500
        )
        card_content.pack()
        
        # 信息标签
        info_label = ctk.CTkLabel(
            main_frame,
            text="💡 这只是框架功能的一小部分展示。完整应用包含更多高级组件和布局。",
            font=ModernTheme.get_font('body_sm'),
            text_color=ModernTheme.get_color('text_secondary'),
            wraplength=500
        )
        info_label.pack()
        
        print("✅ 简单演示窗口已创建")
        root.mainloop()
        
    except Exception as e:
        print(f"❌ 简单演示创建失败: {e}")

def main():
    """主函数"""
    print("🎨 现代化GUI框架演示")
    print("=" * 60)
    
    # 显示框架预览
    show_framework_preview()
    
    # 检查依赖
    missing_packages = check_dependencies()
    
    # 安装缺失的包
    if missing_packages:
        print(f"\n📦 检测到缺失的依赖包...")
        install_choice = input("是否自动安装缺失的包? (y/n): ").lower()
        
        if install_choice == 'y':
            if not install_missing_packages(missing_packages):
                print("❌ 依赖安装失败，请手动安装")
                return
        else:
            print("❌ 请手动安装依赖包:")
            print("   pip install -r requirements_modern_gui.txt")
            return
    
    # 选择演示模式
    print(f"\n🎯 选择演示模式:")
    print("   1. 完整应用演示 (推荐)")
    print("   2. 简单组件演示")
    
    choice = input("请选择 (1/2): ").strip()
    
    if choice == "1":
        print("\n⏳ 启动完整应用演示...")
        time.sleep(1)
        run_demo_app()
    elif choice == "2":
        print("\n⏳ 启动简单组件演示...")
        time.sleep(1)
        create_simple_demo()
    else:
        print("❌ 无效选择")

if __name__ == "__main__":
    main()
